export * from './iscode'

/**
 * 用于判断当前是否为微信浏览器环境
 * @returns 返回一个布尔值，true代表是微信浏览器环境，false则反之
 */
export function isWX(): boolean {
  const ua = window.navigator.userAgent.toLowerCase()
  const match = ua.match(/MicroMessenger/i)
  if (match === null) return false
  if (match.includes('micromessenger')) return true

  return false
}

/**
 * 用于复制操作
 * @param val 必传：复制的值
 * @param cb 选传，回调函数
 */
export function copy(val: any, cb?: () => void) {
  if (navigator.clipboard?.writeText) {
    // 兼容性不是很好
    navigator.clipboard.writeText(val).then(() => {
      cb && cb()
    })
  } else {
    // execCommand已弃用
    const copyInput = document.createElement('input')
    document.body.appendChild(copyInput)
    copyInput.setAttribute('value', val)
    copyInput.select()
    document.execCommand('Copy')
    copyInput.remove()
    cb && cb()
  }
}

/**
 * 用于判断是否是ios环境
 * @returns boolean
 */
export function isIOS(): boolean {
  const u = navigator.userAgent
  // const isAndroid = u.indexOf("Android") > -1 || u.indexOf("Adr") > -1 // android终端
  const isIos = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/) // ios终端

  return isIos
}

/**
 * 判断元素是否超过n行
 * 默认两行
 */
interface MoreThanLineParams {
  containerClassName: string // 父元素类名，需包含字号属性
  width: number // 行宽度
  content: string // 内容
  line?: number // 行数
}
export function moreThanLines({
  containerClassName,
  content,
  width,
  line = 2
}: MoreThanLineParams) {
  let result = false
  // 用于存放内容的元素
  const tempNode = document.createElement('div')
  tempNode.setAttribute('id', 'temp-node')
  tempNode.style.position = 'absolute'
  tempNode.style.visibility = 'hidden'
  // 将传递进来的类名和文本内容赋值
  tempNode.classList.add(containerClassName)
  tempNode.style.width = width + 'px'
  tempNode.innerHTML = content
  const containerNode = document.body.appendChild(tempNode)
  // 用于计算行高的元素
  const dupNode = document.createElement('div')
  dupNode.classList.add(containerClassName)
  dupNode.style.width = width + 'px'
  dupNode.style.wordBreak = 'keep-all'
  dupNode.style.overflowWrap = 'normal'
  dupNode.style.whiteSpace = 'nowrap'
  dupNode.style.position = 'absolute'
  dupNode.innerHTML = content.substring(0, 2)
  dupNode.setAttribute('id', 'copy-node')
  const getLineHeightNode = document.body.appendChild(dupNode)

  if (containerNode.offsetHeight > getLineHeightNode.offsetHeight * line) {
    result = true
  }
  document.body.removeChild(containerNode)
  document.body.removeChild(getLineHeightNode)
  return result
}

/**
 * 用于过滤处理html格式的字符串
 * @param untrusted 必传：需要处理的字符串
 * @returns string
 */
export function escapeHTML(untrusted: string) {
  return untrusted
    .replace(/<(?:.|\n)*?>/gm, '')
    .replace(/(&rdquo;)/g, '"')
    .replace(/&ldquo;/g, '"')
    .replace(/&mdash;/g, '-')
    .replace(/&nbsp;/g, '')
    .replace(/&gt;/g, '>')
    .replace(/&lt;/g, '<')
    .replace(/<[\w\s"':=\/]*/, '')
}

/**
 * 用于将号码中间部分格式化成*
 * @param phoneNum 必传：需要处理的字符串
 * @returns string
 */
export function starPhoneNum(phoneNum: string) {
  return phoneNum.slice(0, -8) + '****' + phoneNum.slice(-4)
}
